package ocio.actions;  

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import ocio.beans.Oferta;
import ocio.services.OfertaService;
import ocio.services.ServiceLocator;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Clase destinataria de la petición de modificación de los datos de una oferta.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Oferta
 */
public class ModificarOfertaAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private int id;
	private String nombre;
	private int plazasDisp;
	private String plazasDispText;
	private int plazasReserv;
	private Date fechaLim;
	private String fechaLimText;
	private double precioXpersona;
	private String precioXpersonaText;
	private String descripcion;
	private String mensaje;
	
	private Oferta oferta;
	
   /**
	 * Método execute() de la clase ActionSupport de Struts 2. 
	 * Solicita los servicios para modificar la información de una oferta según 
	 * los datos introducidos por el proveedor o por el administrador en un formulario.
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario.
	 */
	public String execute(){	
		
	
	  ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
	  OfertaService ofertaService = (OfertaService)serviceLocator.getService("Oferta");		

	  ofertaService.update(this);	   
		
	  this.setOferta((Oferta)ofertaService.searchById(id));
	  mensaje="Los datos de la oferta han sido modificados con éxito.";
				
	  return "success";
		
	}
	
   /**
	 * Método validate() de la clase ActionSupport de Struts 2. 
	 * Comprueba que la informacion introducida por el proveedor o administrador en el formulario
	 *  está en el formato adecuado, se han rellenado los campos obligatorios, el número de plazas disponibles
	 *  no es menor que las ya reservadas y la fecha no es inferior a la actual. 
	 */
	public void validate(){
		
		  try { //Comprobar si viene un n�mero entero en plazasDisp.
			  this.plazasDisp=Integer.parseInt(this.plazasDispText);
		  } catch (NumberFormatException e) {
		  	  this.addFieldError("plazasDisp","Debe introducir un número en plazas disponibles.");
		  }
		
		  try { //Comprobar si la fecha es válida
				SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy");
				fechaLim = formatter.parse(this.fechaLimText);
		  } catch (ParseException e1) {
			    try { // Aceptar formato alternativo
			    	SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
			    	fechaLim = formatter.parse(this.fechaLimText);
			    } catch (ParseException e2) {
			    	this.addFieldError("fechaLimText","El formato de fecha no es válido.");
			    }
		  }
		  // Comprobar fecha es posterior a actual.
		  Date hoy = new Date();
		  if (fechaLim!=null && fechaLim.compareTo(hoy)<0) {
	    	this.addFieldError("fechaLimText","La fecha limite debe ser posterior a la actual.");
		  }
		  
		  if (this.plazasDisp<this.plazasReserv) {
				this.addActionError("El número de plazas disponibles no puede ser menor que el de plazas reservadas.");
		  }
		  
		  //Datos para la página de vuelta si hay error
		  ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		  OfertaService ofertaService = (OfertaService)serviceLocator.getService("Oferta");		
		  this.setOferta((Oferta)ofertaService.searchById(id)); 
		
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public int getPlazasDisp() {
		return plazasDisp;
	}

	public void setPlazasDisp(int plazasDisp) {
		this.plazasDisp = plazasDisp;
	}

	public int getPlazasReserv() {
		return plazasReserv;
	}

	public void setPlazasReserv(int plazasReserv) {
		this.plazasReserv = plazasReserv;
	}

	public Date getFechaLim() {
		return fechaLim;
	}

	public void setFechaLim(Date fechaLim) {
		this.fechaLim = fechaLim;
	}

	public double getPrecioXpersona() {
		return precioXpersona;
	}

	public void setPrecioXpersona(double precioXpersona) {
		this.precioXpersona = precioXpersona;
	}

	public Oferta getOferta() {
		return oferta;
	}

	public void setOferta(Oferta oferta) {
		this.oferta = oferta;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public String getPlazasDispText() {
		return plazasDispText;
	}

	public void setPlazasDispText(String plazasDispText) {
		this.plazasDispText = plazasDispText;
	}

	public String getFechaLimText() {
		return fechaLimText;
	}

	public void setFechaLimText(String fechaLimText) {
		this.fechaLimText = fechaLimText;
	}

	public String getPrecioXpersonaText() {
		return precioXpersonaText;
	}

	public void setPrecioXpersonaText(String precioXpersonaText) {
		this.precioXpersonaText = precioXpersonaText;
	}

		
}
